
/**
 * 参考代码
 * https://www.cnblogs.com/wushanbao/p/7003308.html
 */
var fs = require('fs');

console.log(__dirname);

/**
 * 异步读取文件readFile函数
 * filename: 必选，文件名
 * callback: 读取文件后的回调函数，data读取的数据
 */
fs.readFile('input.txt', function(err, data) {

    if (err) return console.error(err);
    console.log("async read:" + data.toString());
});

/**
 * 写文件writeFile函数
 * filename: 必选，文件名
 * data: 要写入的数据，字符串或者Buffer对象
 * callback: 回调函数，data数据
 */
var w_data = "这是通过fs.writeFile()函数写入的内容\r\n";
var w_data = new Buffer(w_data);

fs.writeFile(__dirname + 'test.txt', w_data, function() {
    console.log('write succeed！');
})

/**
 * 以追加的方式写文件appendFile
 * 
 */
fs.appendFile('input.txt', '使用fs.appendFile追加文件内容', function() {
        console.log('append succeed!');
});


/**
 * 打开文件
 * filename: 必选参数，文件名
 * flags: 操作表示，'r'，以读方式打开
 * callback: 打开文件后的回调函数，fd表示文件返回的文件描述符
 */
fs.open("input.txt", "r+", function(err, fd) {

    if (err) {
        console.error(err);
        return;
    } else {
        console.log(fd); // 4
        // 读取打开的文件内容到缓冲区
        /**
         * fd: 文件描述符
         * buffer: Buffer对象，v8引擎风分配的一段内存
         * offset: 向缓冲区中写入时的初始位置
         * length: 读取文件的长度
         * position: 读取文件的初始位置
         * callback: 读取执行完成后回调函数
         */
        var buffer = new Buffer(255);
        var bufferStart = 0;
        var fileStart = 0;

        fs.read(fd, buffer, bufferStart, buffer.length, fileStart, function(err, bytesRead, buffer) {
            if (err) {
                throw err;
            } else {

                console.log(buffer.toString());
            }
        });
    }
    
});

console.log("end execute!");